import { app, shell, BrowserWindow } from 'electron'
import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../../resources/icon.png?asset'

// 创建应用程序主窗口
function createWindow(): void {
  // 创建浏览器窗口配置
  const mainWindow = new BrowserWindow({
    width: 1024, // 窗口默认宽度
    height: 670, // 窗口默认高度
    show: false, // 先隐藏窗口等待加载完成
    autoHideMenuBar: true, // 自动隐藏菜单栏
    ...(process.platform === 'linux' ? { icon } : {}), // Linux平台需要单独设置图标
    webPreferences: {
      preload: join(__dirname, '../preload/index.js'), // 预加载脚本路径
      sandbox: false // 禁用沙箱模式（根据实际需求配置）
    }
  })

  // 当页面加载完成时显示窗口（避免白屏）
  mainWindow.on('ready-to-show', () => {
    mainWindow.show()
  })

  // 处理窗口内打开新链接的事件（使用系统默认浏览器打开）
  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url) // 使用系统浏览器打开外部链接
    return { action: 'deny' } // 阻止在应用内直接打开
  })

  // 根据环境加载页面（开发环境使用HMR热更新，生产环境加载本地文件）
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) // 开发环境URL
  } else {
    mainWindow.loadFile(join(__dirname, '../renderer/index.html')) // 生产环境文件路径
  }
}

// 当Electron完成初始化后创建窗口
app.whenReady().then(() => {
  // 设置Windows平台的应用程序用户模型ID（任务栏相关）
  electronApp.setAppUserModelId('com.electron')

  // 配置开发工具快捷键（开发模式下F12打开，生产环境忽略Ctrl+R刷新）
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  // IPC通信
  ipcBounding()

  // 创建主窗口
  createWindow()

  // macOS专属行为：当没有窗口时点击Dock图标重新创建窗口
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 窗口全部关闭时退出应用（macOS除外）
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit() // 非macOS平台直接退出
  }
})

// 可以在此处添加其他主进程代码
// 或将代码拆分到不同文件并通过require引入
